////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  asdtuning.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef ASDTUNING_H
#define ASDTUNING_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"

#define ASDTUNING_NAMESPACE_BEGIN namespace asdTuning {
#define ASDTUNING_NAMESPACE_END }

ASDTUNING_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// asd_gamma_table_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct asd_gamma_table_type
{
    UINT16 bits_depth;
    UINT16 entries_num;
    UINT16 gamma_G[256];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// hazy_scene_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct hazy_scene_detect_type
{
    INT32  hazy_detection_enable;
    FLOAT  hazy_running_frequency;
    FLOAT  hazy_detection_threshold_on;
    FLOAT  hazy_detection_threshold_off;
    UINT16 ui_hazy_display_th;
    INT32  hazy_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// auto_hdr_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct auto_hdr_detect_type
{
    FLOAT backlight_high_threshold;
    FLOAT backlight_low_threshold;
    FLOAT portrait_high_threshold;
    FLOAT portrait_low_threshold;
    INT32 auto_hdr_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// portrait_scene_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct portrait_scene_detect_type
{
    INT32  portrait_detection_enable;
    FLOAT  skin_color_boost_factor;
    FLOAT  min_face_content_threshold;
    FLOAT  max_face_content_threshold;
    FLOAT  soft_focus_degree_7_7;
    FLOAT  soft_focus_degree_5_5;
    FLOAT  aggressiveness;
    UINT16 ui_portrait_display_th;
    INT32  portrait_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// landscape_scene_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct landscape_scene_detect_type
{
    INT32  landscape_detection_enable;
    FLOAT  landscape_red_boost_factor;
    FLOAT  landscape_green_boost_factor;
    FLOAT  landscape_blue_boost_factor;
    FLOAT  min_blue_green_content_detection_threshold;
    FLOAT  max_blue_green_content_detection_threshold;
    INT32  green_offset_rg;
    INT32  green_offset_bg;
    FLOAT  aggressiveness;
    INT64  lux_idx_indoor;
    INT64  lux_idx_outdoor;
    UINT16 ui_landscape_display_th;
    INT32  landscape_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// backlit_scene_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct backlit_scene_detect_type
{
    INT32  backlight_detection_enable;
    FLOAT  histogram_offset;
    UINT64 low_luma_threshold;
    UINT64 high_luma_threshold;
    FLOAT  low_luma_count_percent_threshold;
    FLOAT  high_luma_count_percent_threshold;
    FLOAT  kept_pixel_ratio_th;
    FLOAT  backlit_aggressiveness;
    FLOAT  max_percent_threshold;
    UINT16 ui_backlit_display_th;
    INT32  backlit_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// asd_chrx_flag_t
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class asd_chrx_flag_t
{
    ASD_DISABLED       = 0,
    ASD_FULLY_ENABLED  = 1,
    ASD_DETECTION_ONLY = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// snow_scene_detect_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct snow_scene_detect_type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// snow_scene_detection_enable
    /// Default Value: ASD_FULLY_ENABLED
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    asd_chrx_flag_t snow_scene_detection_enable;
    UINT64          y_cloudy_snow_threshold;
    UINT64          awb_y_max_in_grey;
    UINT64          min_snow_cloudy_sample_th;
    UINT64          extreme_snow_cloudy_sample_th;
    UINT32          snow_scene_indoor_index;
    UINT32          snow_scene_outdoor_index;
    UINT64          severe_snow_scene_cap;
    FLOAT           snowscene_aggressiveness;
    UINT16          ui_snow_cloudy_display_th;
    INT32           snow_scene_3A_compensation_enable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ChromatixASDTuningType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ChromatixASDTuningType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;
    INT32                       ASD_Software_Type;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// snow_scene_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    snow_scene_detect_type      snow_scene_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// backlit_scene_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    backlit_scene_detect_type   backlit_scene_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// landscape_scene_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    landscape_scene_detect_type landscape_scene_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// portrait_scene_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    portrait_scene_detect_type  portrait_scene_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// auto_hdr_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    auto_hdr_detect_type        auto_hdr_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// hazy_scene_detect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    hazy_scene_detect_type      hazy_scene_detect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gamma_table
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    asd_gamma_table_type        gamma_table;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ChromatixASDTuningTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ChromatixASDTuningTypeClass : public ParameterModule, public ChromatixASDTuningType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChromatixASDTuningTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChromatixASDTuningTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~ChromatixASDTuningTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load asd_gamma_table_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadasd_gamma_table_type(
        ParameterFileSymbolTableEntry* entry,
        asd_gamma_table_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load hazy_scene_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadhazy_scene_detect_type(
        ParameterFileSymbolTableEntry* entry,
        hazy_scene_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load auto_hdr_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadauto_hdr_detect_type(
        ParameterFileSymbolTableEntry* entry,
        auto_hdr_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load portrait_scene_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadportrait_scene_detect_type(
        ParameterFileSymbolTableEntry* entry,
        portrait_scene_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load landscape_scene_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadlandscape_scene_detect_type(
        ParameterFileSymbolTableEntry* entry,
        landscape_scene_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load backlit_scene_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadbacklit_scene_detect_type(
        ParameterFileSymbolTableEntry* entry,
        backlit_scene_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load snow_scene_detect_type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadsnow_scene_detect_type(
        ParameterFileSymbolTableEntry* entry,
        snow_scene_detect_type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ChromatixASDTuningType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadChromatixASDTuningType(
        ParameterFileSymbolTableEntry* entry,
        ChromatixASDTuningType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        ChromatixASDTuningType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class ChromatixASDTuningTypeClass

ASDTUNING_NAMESPACE_END
#endif // ASDTUNING_H

